/*
 * @Author: xiaohuan
 */

'use strict';

const conf = {
	serverHost: '/api',
	socketHost: '/', // 线上是'/', 本地是'localhost:8080'
	imageHost: '/'
}

class Util {
	// 获取请求url地址
	getServerUrl(path) {
		return conf.serverHost + path;
	}
	// 获取图片地址
	getImageUrl(path) {
		return conf.imageHost + path;
	}
	// 获取服务器聊天室地址
	getChatUrl() {
		return conf.socketHost;
	}
	// 获取url参数
	getHashParam(name) {
		var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"),
			queryString = window.location.hash.split('?')[1] || '',
			result = queryString.match(reg);
		return result ? decodeURIComponent(result[2]) : null;
	}
	// 返回上一页
	goBack(vm) {
		vm.$router.goBack();
	}
	// 跳转页面
	goPage(vm, page) {
		vm.$router.push(page);
	}
	/**
	 * 空闲控制 返回函数连续调用时，空闲时间必须大于或等于 idle，action 才会执行
	 * @param idle   {number}    空闲时间，单位毫秒
	 * @param action {function}  请求关联函数，实际应用需要调用的函数
	 * @return {function}    返回客户调用函数
	 */
	debounce(idle, action) {
		var last
		return function() {
			var ctx = this,
				args = arguments
			clearTimeout(last)
			last = setTimeout(function() {
				action.apply(ctx, args)
			}, idle)
		}
	}
	/**
	 * 频率控制 返回函数连续调用时，action 执行频率限定为 次 / delay
	 * @param delay  {number}    延迟时间，单位毫秒
	 * @param action {function}  请求关联函数，实际应用需要调用的函数
	 * @return {function}    返回客户调用函数
	 */
	throttle(delay, action) {
		var last = 0
		return function() {
			var curr = +new Date()
			if(curr - last > delay) {
				action.apply(this, arguments)
				last = curr
			}
		}
	}
}

export default new Util();